home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO017.dsk
/
EXEC.MAKER.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
8KB
|
140 lines
5 REM EXEC.MAKER COPYRIGHT (C) 1985 STEVEN HUMPAGE
10 GOTO 30000
50 ONERR GOTO 70
53 A = PEEK(49152): IF A <128 THEN 53
55 POKE 49168,0:A = A -128
60 IF A < >8 AND A < >10 AND A < >11 AND A < >13 AND A < >21 AND A < >32 THEN PRINT CHR$(7);: GOTO 53
65 RETURN
70 ERR = PEEK(222):L = PEEK(218) + PEEK(219) *256: CALL -3288
75 IF ERR = 255 THEN PRINT CHR$(7);: GOTO 53
80 GOTO 20000
100 HOME
110 PRINT "EXEC.MAKER": PRINT
120 PRINT "ENTER SOURCE PREFIX:": PRINT "/";
130 CH = 2: GOSUB 10000:SP$ = IN$: IF IN$ = "" THEN 100
135 LS = LEN(SP$): IF ( LEFT$(SP$,1) = "/") AND LS >1 THEN SP$ = RIGHT$(SP$,LS -1): GOTO 135
136 SP$ = "/" +SP$
137 LS = LEN(SP$): IF ( RIGHT$(SP$,1) = "/") AND LS >1 THEN SP$ = LEFT$(SP$,LS -1): GOTO 137
140 IF SP$ = "/" THEN PRINT CHR$(7);: GOTO 100
150 VTAB 4: CALL EOL: PRINT SP$
1000 ONERR GOTO 19000
1010 PRINT D$;"OPEN "SP$",TDIR"
1020 PRINT D$;"READ "SP$
1030 INPUT A$,A$,A$:K = 1: ONERR GOTO 1070
1040 INPUT A$: IF LEN(A$) = 0 THEN 1090
1050 FILE$(K) = MID$ (A$,2,15):FT$(K) = MID$ (A$,18,3):FL$(K) = LEFT$(A$,1):K = K +1
1060 GOTO 1040
1070 ERR = PEEK(222):L = PEEK(218) + PEEK(219) *256: CALL -3288: POKE 216,0: IF ERR = 5 THEN 1090
1080 GOTO 20000: REM FATAL ERROR
1090 PRINT D$;"CLOSE "SP$
1092 IF K = 1 THEN MSG$ = "NO FILES IN THAT DIRECTORY":L = 1010: GOTO 19100: REM L=1010 IS A CHEAP TRICK
1095 NFILES = K -1:NMARKED = 0
1100 KN = 0:OLDROW = 5:NROW = 5: FOR K = 0 TO NFILES:MARK$(K) = " ": NEXT K: GOSUB 11000:FIRST = TRUE: GOSUB 2000: REM MASK FIRST LINE INVERSE
1110 GOSUB 50: REM READ ARROW, SPACE, OR RETURN
1120 IF A = 13 THEN GOTO 5000: REM GET DESTINATION AND COPY
1130 IF A < >8 AND A < >11 THEN 1170
1140 IF OLDROW < >5 THEN NROW = OLDROW -1: GOSUB 2000: GOTO 1110
1150 IF OLDROW = 5 AND KN = 0 THEN PRINT CHR$(7);: GOTO 1110
1160 KN = KN -19: GOSUB 11000:NROW = 23:FIRST = TRUE: GOSUB 2000: GOTO 1110
1170 IF (A < >10 AND A < >21) THEN 1210
1180 IF OLDROW <23 AND (KN +OLDROW -5) <NFILES THEN NROW = OLDROW +1: GOSUB 2000: GOTO 1110
1190 IF OLDROW = 23 AND (KN +OLDROW -5) <NFILES THEN KN = KN +19: GOSUB 11000:NROW = 5:FIRST = TRUE: GOSUB 2000: GOTO 1110
1200 PRINT CHR$(7);: GOTO 1110
1210 IF A = 32 THEN GOSUB 3000: GOTO 1110
1220 STOP
2000 IF FIRST THEN 2040
2010 VTAB OLDROW: POKE 36,2: PRINT FILE$(KN +OLDROW -5)
2040 FIRST = FALSE
2050 VTAB NROW: POKE 36,2: INVERSE : PRINT FILE$(KN +NROW -5): NORMAL
2060 OLDROW = NROW
2070 RETURN
3000 K = KN +OLDROW -5
3010 IF MARK$(K) = " " THEN MARK$(K) = ">":NMARKED = NMARKED +1: GOTO 3040
3030 MARK$(K) = " ":NMARKED = NMARKED -1
3040 VTAB OLDROW: POKE 36,0: PRINT MARK$(K)
3050 RETURN
5000 POKE 36,0: VTAB 5: CALL EOP: IF NMARKED = 0 THEN PRINT CHR$(7)"NO FILE SELECTED": GOTO 5280
5010 PRINT "ENTER DESTINATION PREFIX:": PRINT "/";:CH = 2: GOSUB 10000:DP$ = IN$: IF IN$ = "" THEN PRINT CHR$(7);: GOTO 5000
5020 LD = LEN(DP$): IF ( LEFT$(DP$,1) = "/") AND LD >1 THEN DP$ = RIGHT$(DP$,LD -1): GOTO 5020
5021 DP$ = "/" +DP$
5022 LD = LEN(DP$): IF ( RIGHT$(DP$,1) = "/") AND LD >1 THEN DP$ = LEFT$(DP$,LD -1): GOTO 5022
5023 IF DP$ = "/" THEN PRINT CHR$(7);: GOTO 5000
5025 IF SP$ = DP$ THEN PRINT CHR$(7);: GOTO 5000
5030 IF MARK$(0) = ">" THEN FOR J = 1 TO NFILES:MARK$(J) = ">": NEXT J
5040 VTAB 6: CALL EOP: PRINT DP$
5100 POKE 36,0: VTAB 7: CALL EOP
5110 PRINT "ENTER FULL PATH NAME OF EXEC FILE:": PRINT "/";:CH = 2: GOSUB 10000:EX$ = IN$: IF IN$ = "" THEN PRINT CHR$(7);: GOTO 5100
5120 LX = LEN(EX$): IF ( LEFT$(EX$,1) = "/") AND LX >1 THEN EX$ = RIGHT$(EX$,LX -1): GOTO 5120
5130 EX$ = "/" +EX$
5140 LX = LEN(EX$): IF ( RIGHT$(EX$,1) = "/") AND LX >1 THEN EX$ = LEFT$(EX$,LX -1): GOTO 5140
5150 VTAB 8: CALL EOP: PRINT EX$
5200 ONERR GOTO 6000
5210 PRINT D$;"OPEN "EX$
5220 PRINT D$;"APPEND "EX$
5230 FOR K = 1 TO NFILES
5240 IF MARK$(K) = " " OR FT$(K) = "DIR" THEN 5260
5250 PRINT "COPY "SP$"/"FILE$(K)","DP$"/"FILE$(K)
5260 NEXT K
5270 PRINT D$;"CLOSE "EX$
5280 PRINT "CONTINUE? (Y/N) ";: GET A$
5290 IF A$ = "Y" OR A$ = "y" THEN 100
5300 IF A$ < >"N" AND A$ < >"n" THEN PRINT CHR$(7);: VTAB ( PEEK(37)): POKE 36,0: CALL EOP: GOTO 5280
5310 END
6000 ERR = PEEK(222):L = PEEK(218) + PEEK(219) *256: CALL -3288
6010 IF ERR < >10 THEN 19005
6020 VTAB 20: POKE 36,0: CALL EOP: PRINT EX$" IS LOCKED. UNLOCK? (Y/N) ";: GET A$
6030 IF A$ = "Y" OR A$ = "y" THEN PRINT D$;"UNLOCK "EX$: GOTO 5220
6040 IF A$ < >"N" AND A$ < >"n" THEN PRINT CHR$(7);: GOTO 6020
6050 GOTO 5000
9999 REM PREFIX INPUT SUBROUTINE
10000 IN$ = "":TEMP$ = ""
10010 GET A$: IF A$ = CHR$(13) THEN POKE 36,CH -1: CALL EOL: PRINT IN$: RETURN
10012 IF A$ = CHR$(27) THEN VTAB 9: POKE 36,0: CALL EOP: POP : GOTO 5280
10015 IF A$ > = "a" AND A$ < = "z" THEN A$ = CHR$( ASC(A$) -32)
10020 IF (A$ > = "A" AND A$ < = "Z") OR (A$ > = "0" AND A$ < = "9") OR A$ = "." OR A$ = "/" THEN GOTO 10050
10030 IF A$ = CHR$(8) AND LEN(IN$) >1 THEN PRINT CHR$(8);:IN$ = LEFT$(IN$, LEN(IN$) -1): GOTO 10010
10035 IF A$ = CHR$(8) AND LEN(IN$) >0 THEN PRINT A$;:IN$ = "": GOTO 10010
10040 IF A$ = CHR$(21) AND LEN(IN$) < LEN(TEMP$) THEN A$ = MID$ (TEMP$, LEN(IN$) +1,1): PRINT A$;:IN$ = IN$ +A$: GOTO 10010
10045 PRINT CHR$(7);: GOTO 10010
10050 IN$ = IN$ +A$: IF LEN(IN$) > LEN(TEMP$) THEN TEMP$ = IN$
10055 PRINT A$;
10060 GOTO 10010
11000 POKE 36,0: VTAB 5:J = 0: FOR K = KN TO KN +18
11020 IF KN +J >NFILES THEN CALL EOL: PRINT : GOTO 11040
11030 PRINT MARK$(K)FL$(K)FILE$(K)" "FT$(K)
11040 J = J +1: NEXT K
11050 RETURN
19000 ERR = PEEK(222):L = PEEK(218) + PEEK(219) *256: POKE 216,0
19005 IF ERR = 6 OR ERR = 7 THEN MSG$ = "PATH NOT FOUND": GOTO 19100
19010 IF ERR = 4 THEN MSG$ = DP$ +" IS WRITE PROTECTED": GOTO 19100
19015 IF ERR = 9 THEN MSG$ = "DISK FULL": GOTO 19100
19020 IF ERR = 13 THEN MSG$ = "FILE TYPE MISMATCH": GOTO 19100
19025 IF ERR = 16 THEN MSG$ = "SYNTAX ERROR": GOTO 19100
19030 IF ERR = 17 THEN MSG$ = "DIRECTORY FULL": GOTO 19100
19035 GOTO 20000
19100 VTAB 22: POKE 36,0: CALL EOL: PRINT MSG$ CHR$(7)" PRESS A KEY";: GET A$: PRINT A$
19105 CALL -3288
19110 IF L = 1010 THEN 100: REM CLEAR SCREEN AND PROMPT
19120 IF L = 5210 THEN 5100: REM GET ANOTHER EXEC FILE NAME
19130 IF L = 5220 THEN 5280: REM IF NOT POSSIBLE TO WRITE TO FILE, THEN CLOSE IT AND ASK TO CONTINUE
20000 VTAB 23: POKE 36,0: PRINT CHR$(7)"ERROR # "ERR" IN LINE # "L: STOP : REM FATAL ERROR
30000 HOME :TRUE = 1:FALSE = 0:D$ = CHR$(4):EOL = -868:EOP = -958: DIM FILE$(50): DIM FT$(50): DIM FL$(50): DIM MARK$(50)
30005 FILE$(0) = "COPY ALL FILES ":FT$(0) = "***":FL$(0) = "*"
30010 VTAB 3: PRINT " EXEC FILE MAKER "
30020 VTAB 5: PRINT " FOR USE WITH THE COPY COMMAND "
30030 VTAB 7: PRINT " COPYRIGHT (C) 1985 STEVEN HUMPAGE "
30040 VTAB 9: PRINT "USE THIS PROGRAM TO GENERATE EXEC FILES"
30050 PRINT "WHICH WILL COPY FILES FROM ONE "
30060 PRINT "DIRECTORY TO ANOTHER. THE SOURCE "
30065 PRINT "DIRECTORY MUST BE ON LINE. FIRST ENTER "
30070 PRINT "THE SOURCE DIRECTORY. ITS FILES WILL BE"
30080 PRINT "PRINTED ON THE SCREEN. SELECT THE FILES"
30090 PRINT "YOU WANT TO COPY WITH THE ARROW KEYS "
30100 PRINT "AND MARK THEM WITH THE SPACE BAR. "
30110 PRINT "PRESS RETURN AND ENTER THE DESTINATION "
30120 PRINT "PREFIX. NEXT ENTER THE FULL PATH NAME "
30130 PRINT "OF THE EXEC FILE. IF IT ALREADY EXISTS "
30140 PRINT "THE NEW COMMANDS WILL BE ADDED TO THE "
30150 PRINT "END OF THE EXISTING FILE. "
30170 VTAB 24: POKE 36,0: PRINT "PRESS ANY KEY TO BEGIN";: GET A$
30180 GOTO 100